Bash History Manage Setting¶
모의해킹 및 침투 테스트 점검을 수행할 때, Terminal을 사용할 경우 History 관리
- 관리 대상:
history,.bash_history (Shell 환경에 맞는 기록파일)
1. history 설정¶
기본적으로 history는 날짜와 라인 번호를 출력하지 않고 입력한 명령어만 출력한다.
.bash_history파일에 날짜 및 라인 번호를 설정하는 코드
vi ./bashrc #bash 설정 값 수정
export HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S " #Timestamp 저장 활성화
source .bashrc #변경 값 적용
history
#저장결과
#...
#1958 2026-01-07 09:16:57 exit
#1959 2026-01-07 09:16:58 history
#...
2. .bash_history 설정¶
입력한 명령어는 바로 적용되는게 아닌, Shell이 종료될 때 저장되기 때문에 바로 기록되지 않음
- 명령어를 실행할 때 마다 파일에 기록하도록 명령어 설정
shopt -s histappend #입력 명령어 즉시 저장 활성화
#여러 개의 터미널을 동시에 쓸 경우, 세션 공유
PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"
#여러 개의 터미널을 동시에 쓰는게 아닌 경우, 아래와 같이 설정
PROMPT_COMMAND="history -a;"
#history -a : 현재 세션 명령어를 파일에 Append
#history -c : 메모리 히스토리 클리어
#history -r : 파일에서 다시 읽어오기
설정 결과 명령어를 입력하면 실시간으로 적용
.bash_history에 적용된 결과#1767749943 ls -al #1767749946 cd /home/kali #1767749950 cat .bash_historyhistory에 적용된 결과... 1929 2026-01-07 10:39:03 ls -al 1930 2026-01-07 10:39:06 cd /home/kali 1931 2026-01-07 10:39:10 cat .bash_history 1932 2026-01-07 10:39:52 history ...- 별도로 만든
.bash_history_readable결과2026-01-07 10:39:10 2026-01-07 10:39:10 cat .bash_history 2026-01-07 10:39:19 2026-01-07 10:39:10 cat .bash_history 2026-01-07 10:39:52 2026-01-07 10:39:52 history 2026-01-07 10:40:38 2026-01-07 10:40:38 ls -al
- 모든 입출력 결과를 저장할 경우,
script명령어 사용
- shell Session이 연결되어 있는 동안은, 입력+출력 결과를 모두 저장
$script -a pentest_$(date +%Y%m%d).log
3. History 전체 적용 코드¶
.bashrc파일의 제일 아래 부분에 코드가 저장되며,.bash_history는 기존 저장 방식을 변경할 수 없기 때문에 별도의.bash_history_readable파일로 날짜를 추가해서 저장하도록 설정cat명령어를 그대로 입력하거나,.sh실행파일을 만들어서 적용zsh추가 예정
3.1. bash (wsl)¶
#!/bin/bash
#settings_shell.sh
sed -i 's/\r$//' "$0" 2>/dev/null
cat >> ~/.bashrc << 'EOF'
# === History Settings ===
shopt -s histappend
export HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S "
export HISTSIZE=10000
export HISTFILESIZE=20000
prompt_cmd() {
history -a
history -c
history -r
echo "$(history 1 | sed 's/^[ ]*[0-9]*[ ]*//')" >> ~/.bash_history_readable
}
PROMPT_COMMAND="prompt_cmd"
EOF
source ~/.bashrc
echo "History 설정 완료"
export HISTSIZE={size} #History에 저장할 크기 별도 지정(기본 1000줄)
export HISTFILESIZE={size}
export HISTCONTROL=ignoredups:ignorespace #중복 명령어 저장 안함 설정
3.2. zsh¶
#!/bin/zsh
#settings_shell.sh
sed -i 's/\r$//' "$0" 2>/dev/null
cat >> ~/.zshrc << 'EOF'
# === History Settings ===
setopt APPEND_HISTORY
setopt INC_APPEND_HISTORY
setopt EXTENDED_HISTORY
setopt HIST_IGNORE_DUPS
setopt SHARE_HISTORY
export HISTSIZE=10000
export SAVEHIST=20000
export HISTFILE=~/.zsh_history
precmd() {
local last_num last_time last_cmd
last_num=$(fc -l -1 | awk '{print $1}')
last_time=$(TZ=Asia/Seoul date '+%Y-%m-%d %H:%M:%S')
last_cmd=$(fc -ln -1)
echo "$last_num $last_time $last_cmd" >> ~/.zsh_history_readable
}
EOF
source ~/.zshrc
echo "History 설정 완료"
Trouble Shooting¶
CRLF오류가 발생할 경우 - 아래 명령어 실행 후에 재실행sed -i 's/\r$//' {filename}.sh